<template>
	<el-main>
		<el-card class="box-card" shadow="never">
			<div class="search-box">
				<el-form :inline="true" :model="searchForm" class="demo-form-inline">
					<el-form-item label="商品规格">
						<el-input v-model="searchForm.name" placeholder="" clearable></el-input>
					</el-form-item>
					<el-form-item>
						<el-button type="primary" @click="onSubmit" icon="el-icon-search">查询</el-button>
					</el-form-item>
				</el-form>
			</div>
			<div style="width:100%;height:0;border-bottom:#E4E7ED 1px dashed;margin-bottom: 10px"></div>
			<el-button type="primary" icon="el-icon-plus" @click="addAttr" style="margin-top: 10px">添加规格</el-button>
			<div style="width:100%;height:0;border-bottom:#E4E7ED 1px dashed;margin-top: 10px"></div>
			<el-table
				:data="tableData"
				style="width: 100%;">
				<el-table-column
					type=""
					prop="id"
					label="ID">
				</el-table-column>
				<el-table-column
					prop="name"
					label="规格名">
				</el-table-column>
				<el-table-column
					label="商品规格">
					<template #default="scope">
						<p>{{ scope.row.title }}</p>
					</template>
				</el-table-column>
				<el-table-column
					label="商品规格值">
					<template #default="scope">
						<p v-for="(item,index) in scope.row.item.split(' | ')" :key="index">{{ item }}</p>
					</template>
				</el-table-column>
				<el-table-column
					prop="operation"
					label="操作">
					<template #default="scope">
						<el-button @click="handleEdit(scope.row)" type="text" size="small">编辑</el-button>
						<el-button @click="handleDel(scope.row)" type="text" size="small">删除</el-button>
					</template>
				</el-table-column>
			</el-table>
			<Pages :form="searchForm" :page-obj="page" @pageChange="handlePageChange" @pageJump="getList"></Pages>

			<el-dialog :title="title" v-model="dialogVisible" width="900px" :close-on-click-modal="false">
				<el-form :model="form" :rules="rules" ref="ruleForm" label-width="80px">
					<el-form-item label="模板名称" prop="name">
						<el-input v-model="form.name"></el-input>
					</el-form-item>
					<el-form-item label="参数">
						<el-button type="primary" icon="el-icon-plus" size="small" @click="addRule">新的规格</el-button>
						<el-table
							:data="preItem"
							border
							style="width: 100%;margin-top: 10px">
							<el-table-column
								label="规格名"
								width="200">
								<template #default="scope">
									<el-input placeholder="规格名" style="width: 150px"
											  v-model="scope.row.title"></el-input>
									<el-icon>
										<component :is="deleteIcon" @click="delTitle(scope.$index)" class="del-btn"/>
									</el-icon>
								</template>
							</el-table-column>
							<el-table-column
								label="规格值">
								<template #default="scope">
									<div style="width: 180px;float: left;margin-top: 5px"
										 v-for="(vo,index) in scope.row.item" :key="index">
										<el-input placeholder="规格值" style="width: 150px"
												  v-model="scope.row.item[index]"></el-input>
										<el-icon>
											<component :is="deleteIcon" @click="delItem(scope.$index, index)"
													   class="del-btn"/>
										</el-icon>
									</div>
									<div class="add-btn" @click="addNewItem(scope.$index)">
										<el-icon>
											<el-icon-plus/>
										</el-icon>
										添加
									</div>
								</template>
							</el-table-column>
						</el-table>
					</el-form-item>
					<el-form-item>
						<el-button @click="dialogVisible = false">取 消</el-button>
						<el-button type="primary" @click="optSubmit('ruleForm')" :loading="loading">确 定</el-button>
					</el-form-item>
				</el-form>
			</el-dialog>
		</el-card>
	</el-main>
</template>

<script>
import Pages from '@/components/pages'

export default {
	components: {
		Pages
	},
	data() {
		return {
			searchForm: {
				name: '',
				limit: 15,
				page: 1
			},
			dialogVisible: false,
			title: '新增商品规格',
			page: {
				total: 0,
			},
			tableData: [],
			dialogCateVisible: false,
			form: {
				id: 0,
				name: ''
			},
			ruleItem: {
				'title': '',
				'item': ['']
			},
			preItem: [],
			rules: {
				name: [
					{required: true, message: '请输入模板名称', trigger: 'blur'}
				]
			},
			loading: false,
			plusIcon: "el-icon-plus",
			deleteIcon: "el-icon-delete",
		}
	},
	mounted() {
		this.getList()
	},
	methods: {
		// 获取列表
		async getList() {
			let res = await this.$API.goodsRule.list.get(this.searchForm)
			this.tableData = res.data.data
			this.page.total = res.data.total
		},
		// 添加规格
		addAttr() {
			this.title = '新增商品规格'
			this.dialogVisible = true
			this.preItem = [];
			this.preItem.push(JSON.parse(JSON.stringify(this.ruleItem)))
		},
		addRule() {
			let item = JSON.parse(JSON.stringify(this.ruleItem))
			this.preItem.push(item)
		},
		// 删除规格标题
		delTitle(index) {
			this.preItem.splice(index, 1);
		},
		// 删除规格
		delItem(tableIndex, index) {
			this.preItem[tableIndex].item.splice(index, 1);
		},
		// 添加新的节点
		addNewItem(index) {
			this.preItem[index].item.push('');
		},
		// 搜索
		onSubmit() {
			this.searchForm.page = 1
			this.getList()
		},
		// 编辑参数
		handleEdit(item) {
			this.title = '编辑商品参数'
			this.dialogVisible = true

			this.form.id = item.id
			this.form.name = item.name
			this.preItem = JSON.parse(item.value)
		},
		// 删除参数
		handleDel(item) {
			this.$confirm('此操作将永久删除该商品规格, 是否继续?', '提示', {
				confirmButtonText: '确定',
				cancelButtonText: '取消',
				type: 'warning'
			}).then(async () => {
				let res = await this.$API.goodsRule.del.get({id: item.id})
				if (res.code == 0) {
					this.$message.success(res.msg)
					this.getList()
				} else {
					this.$message.error(res.msg)
				}
			}).catch(() => {
			});
		},
		// 分页
		handlePageChange(page) {
			this.searchForm.page = page
			this.getList()
		},
		// 新增或编辑
		optSubmit(formName) {
			this.$refs[formName].validate(async (valid) => {
				if (valid) {
					if (this.preItem.length == 0) {
						this.$message.error('请输入规格')
						return false;
					}
					this.preItem.forEach((item, index) => {
						this.form['item' + index] = item
					})

					this.loading = true
					let res;
					if (this.form.id) {
						res = await this.$API.goodsRule.edit.post(this.form)
					} else {
						res = await this.$API.goodsRule.add.post(this.form)
					}
					this.loading = false
					if (res.code == 0) {
						this.dialogVisible = false
						this.$message.success(res.msg)
						this.form = {
							id: 0,
							name: ''
						}
						this.getList()
					} else {
						this.$message.error(res.msg)
					}
				}
			});
		}
	}
}
</script>

<style scoped>
p {
	padding: 0;
	margin: 0;
}

.el-table__header tr,
.el-table__header th {
	padding: 0;
	height: 20px;
	line-height: 20px;
}

.del-btn {
	cursor: pointer;
	color: #F56C6C
}

.add-btn {
	cursor: pointer;
	margin-top: 10px;
	color: #409EFF;
	width: 70px;
}
.el-button--small {
	padding: 0 !important;
}
</style>
